package com.leetcode.蓝桥杯.十一届国赛;

/**
 * 有n位同学同时找老师答疑。每位同学都预先估计了自己答疑的时间。
老师可以安排答疑的顺序，同学们要依次进入老师办公室答疑。一位同学答疑的过程如下:1.首先进入办公室，编号为i的同学需要s毫秒的时间。
2.然后同学问问题老师解答，编号为i的同学需要a毫秒的时间。
3.答疑完成后，同学很高兴，会在课程群里面发—条消息，需要的时间可以忽略。
4.最后同学收拾东西离开办公室，需要e;毫秒的时间。一般需要10秒、20秒或30秒，即e;取值为10000，20000或30000。
一位同学离开办公室后，紧接着下一位同学就可以进入办公室了。
答疑从0时刻开始。老师想合理的安排答疑的顺序，使得同学们在课程群里面发消息的时刻之和最小。
输入描述
输入第一行包含一个整数n，表示同学的数量。
接下来n行，描述每位同学的时间。其中第i行包含三个整数 si , ai, ei，意义如上所述。
其中有，1<n<1000，1< 8;≤60000，1<ai≤10f，e, ∈ 10000,20000,30000，即e;一定是10000、20000、30000之一。
输出描述
输出一个整数，表示同学们在课程群里面发消息的时刻之和最小是多少。


思路：假设发出消息是在每位同学离开办公室，即一位同学在 准备s、答疑a、收拾e三个操作后，才发消息。
那么此时，要求总的时刻之和最小，那么每次发消息的时刻尽可能要小，也就是对每个人的三个时间之和（s+a+e）进行排序。
排完序，就可以求出此时总的最小时刻之和是多少。因为这个总时刻是我们假设的，所以里面多了每位同学收拾东西的时间
因此，总的时刻减去所有同学的收拾时间（e1 + e2 +...+en)，就得出最终结果

 * @author LZF
 *
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class 编程题8 {
	public static void main(String[] args) {
		Input input = new Input();
		long[] a = new long[1000 + 10];//a[i] = si + ai + ei
		long[] c = new long[1000 + 10];//c[i]表示每位同学发消息的时刻
		int n = input.nextInt();
		long d = 0;//总的收拾时间 e1 + e2 +...+en
		for (int i = 0; i < n; i++) {
			a[i] = input.nextLong() + input.nextLong();
			long tmp = input.nextLong();
			a[i] += tmp;
			d += tmp;
		}
		Arrays.sort(a, 0, n);
		long ans = 0;
		c[0] = a[0];
		ans = a[0];
		for (int i = 1; i < n; i++) {
			c[i] = c[i - 1] + a[i];
			ans += c[i];
		}
		System.out.println(ans - d);
		input.close();
	}

	public static class Input {
		BufferedReader buf;
		StringTokenizer tok;

		Input() {
			buf = new BufferedReader(new InputStreamReader(System.in));
		}

		void close() {
			if (buf != null) {
				try {
					buf.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

		boolean hasNext() {
			while (tok == null || !tok.hasMoreElements()) {
				try {
					tok = new StringTokenizer(buf.readLine());
				} catch (IOException e) {
					return false;
				}
			}
			return true;
		}

		String next() {
			if (hasNext()) {
				return tok.nextToken();
			}
			return null;
		}

		int nextInt() {
			return Integer.parseInt(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		String nextLine() {
			try {
				return buf.readLine();
			} catch (IOException e) {
				return null;
			}
		}
	}
}